/* 
 * File:   Force.h
 * Author: RedEyedKiller
 *
 * Created on 14 Ιούλιος 2010, 1:54 πμ
 */

#ifndef FORCE_H
#define	FORCE_H

namespace physicsSystem
{

//predefinition
class PhysicalObject;

namespace forces
{

/**
 * A generic physical force. All forces must inherit this class.
 */
class Force
{
public:
    Force(){}
    virtual ~Force(){}
    /**
     * The main method of any force. Through this this force is applied on object.
     * @param object
     */
    virtual void Affect(PhysicalObject* object) = 0;
};

/**
 * Non instant forces which affect objects over time.
 */
class TimedForce : public Force
{
public:
    TimedForce(){}
    virtual ~TimedForce(){}
    /**
     * Updates the force based on delta time between different prepare calls.
     * @param seconds
     */
    virtual void Prepare(float seconds) = 0;
};

};
};
#endif	/* FORCE_H */
